package org.example;

// 声明一个抽象类，在class前前增加abstract
public abstract class Animal {

    protected String name = "";
    public Animal(String name) {
        this.name = name;
    }
    public Animal() {
        this.name = "无名";
    }
    protected int shoutNum = 3;
    public void setShoutNum(int value) {
        this.shoutNum = value;
    }
    public int getShoutNum() {
        return this.shoutNum;
    }
    public String shout() {
        String result = "";
        for(int i=0;i<this.shoutNum;i++){
            // 改成调用 getShoutSound 方法
            result += getShoutSound() + "，";
        }
        return "我的名字叫" + name + " " + result;
    }
    // 此方法留给继承类具体实现，所以用protected修饰
    // 声明一个抽象方法，在返回值类型前加abstract
    //抽象方法没有方法体，直接在括号后面加“;”
    protected abstract String getShoutSound();

}
